package com.study.map.dto;

import lombok.Data;

import java.util.List;

/**
 * 逆地理编码响应DTO
 * 经纬度坐标转换为地址的结果
 *
 * @author study
 * @date 2025-08-31
 */
@Data
public class ReGeoResponse {

    /**
     * 返回状态码
     * 1：成功；0：失败
     */
    private String status;

    /**
     * 返回的状态信息
     */
    private String info;

    /**
     * 状态码
     * 10000：请求正常；其他：请求异常
     */
    private String infocode;

    /**
     * 逆地理编码结果
     */
    private Regeocode regeocode;

    /**
     * 逆地理编码信息
     */
    @Data
    public static class Regeocode {
        /**
         * 结构化地址信息
         */
        private String formatted_address;

        /**
         * 地址组成要素
         */
        private AddressComponent addressComponent;

        /**
         * 道路信息列表
         */
        private List<Road> roads;

        /**
         * 道路交叉口信息
         */
        private List<Roadinter> roadinters;

        /**
         * poi信息列表
         */
        private List<Poi> pois;

        /**
         * 地址周边的AOI信息
         */
        private List<Aoi> aois;
    }

    /**
     * 地址组成要素
     */
    @Data
    public static class AddressComponent {
        /**
         * 国家
         */
        private String country;

        /**
         * 坐标点所在省名称
         */
        private String province;

        /**
         * 坐标点所在城市名称
         */
        private String city;

        /**
         * 城市编码
         */
        private String citycode;

        /**
         * 坐标点所在区
         */
        private String district;

        /**
         * 行政区编码
         */
        private String adcode;

        /**
         * 坐标点所在乡镇
         */
        private String township;

        /**
         * 乡镇街道编码
         */
        private String towncode;

        /**
         * 社区信息
         */
        private Neighborhood neighborhood;

        /**
         * 楼信息
         */
        private Building building;

        /**
         * 门牌信息
         */
        private StreetNumber streetNumber;

        /**
         * 所在商圈信息
         */
        private List<BusinessArea> businessAreas;
    }

    /**
     * 社区信息
     */
    @Data
    public static class Neighborhood {
        /**
         * 社区名称
         */
        private String name;

        /**
         * POI类型
         */
        private String type;
    }

    /**
     * 楼信息
     */
    @Data
    public static class Building {
        /**
         * 建筑名称
         */
        private String name;

        /**
         * POI类型
         */
        private String type;
    }

    /**
     * 门牌信息
     */
    @Data
    public static class StreetNumber {
        /**
         * 街道名称
         */
        private String street;

        /**
         * 门牌号
         */
        private String number;

        /**
         * 坐标点所在位置
         */
        private String location;

        /**
         * 方向
         */
        private String direction;

        /**
         * 门牌地址到请求坐标的距离
         */
        private String distance;
    }

    /**
     * 所在商圈信息
     */
    @Data
    public static class BusinessArea {
        /**
         * 商圈中心点经纬度
         */
        private String location;

        /**
         * 商圈名称
         */
        private String name;

        /**
         * 商圈ID
         */
        private String id;
    }

    /**
     * 道路信息
     */
    @Data
    public static class Road {
        /**
         * 道路ID
         */
        private String id;

        /**
         * 道路名称
         */
        private String name;

        /**
         * 道路到请求坐标的距离
         */
        private String distance;

        /**
         * 方向
         */
        private String direction;

        /**
         * 坐标点
         */
        private String location;
    }

    /**
     * 道路交叉口信息
     */
    @Data
    public static class Roadinter {
        /**
         * 交叉路口到请求坐标的距离
         */
        private String distance;

        /**
         * 方向
         */
        private String direction;

        /**
         * 经纬度坐标
         */
        private String location;

        /**
         * 交叉路名称
         */
        private String first_name;

        /**
         * 交叉路名称
         */
        private String second_name;
    }

    /**
     * poi信息
     */
    @Data
    public static class Poi {
        /**
         * poi的ID
         */
        private String id;

        /**
         * poi名称
         */
        private String name;

        /**
         * poi类型
         */
        private String type;

        /**
         * 电话
         */
        private String tel;

        /**
         * 该POI到请求坐标的距离
         */
        private String distance;

        /**
         * 方向
         */
        private String direction;

        /**
         * poi地址信息
         */
        private String address;

        /**
         * 坐标点
         */
        private String location;

        /**
         * poi所在商圈
         */
        private String businessarea;
    }

    /**
     * 地址周边的AOI信息
     */
    @Data
    public static class Aoi {
        /**
         * AOI ID
         */
        private String id;

        /**
         * AOI名称
         */
        private String name;

        /**
         * AOI所在区域编码
         */
        private String adcode;

        /**
         * AOI中心点坐标
         */
        private String location;

        /**
         * AOI面积
         */
        private String area;

        /**
         * AOI类型
         */
        private String type;

        /**
         * 距离
         */
        private String distance;
    }
}